home *** CD-ROM | disk | FTP | other *** search
- #include <exec/types.h>
- #include <exec/memory.h>
- #include <libraries/dos.h>
- #include <stdio.h>
- #include <fcntl.h>
-
- UBYTE AsciiKonvert[] = {
- 0x09, 0x09, /* Tabulator */
- 0x0a, 0x0a, /* LineFeed */
- 0x0c, 0x0c, /* FormFeed */
- 0x0d, ' ', /* weichen Zeilenumbruch in Leerzeichen konvertieren*/
- 0xad, 0x00, /* WP-Trennung nicht ausführen */
- 0x8c, 0x0a, /* Seitenumbruch in LF */
- 0xa9, '-', /* - übernehmen */
- 0xaa, '-', /* - übernehmen */
- 0x00, 0x00
- };
-
- FILE *DateiOut=NULL;
- FILE *DateiIn=NULL;
-
- UBYTE Buffer[200];
-
- void SkipChars( long c ) {
- if( c < 0xc0 ) {
- /*
- * hierbei handelt es sich um ein Steuerzeichen, also keine
- * Sequenz. Es reicht, das Zeichen zu überspringen.
- */
- return;
- } else {
- /*
- * Es folgt eine Steuersequenz, die mit dem
- * Zeichen c eingeführt wird, aber auch mit dem
- * Zeichen c aufhört.
- */
- long newc;
-
- if( c == 0xcc || c == 0xe0 ) {
- /*
- * Einrückungen in Tabs umwandeln
- */
- putc(0x09, DateiOut);
- }
-
- while( 1 ) {
- newc= getc(DateiIn);
- if( newc == c )
- /*
- * OK, die Sequenz wurde komplett gelesen.
- */
- return;
- }
-
- }
- }
-
- /*
- * Überprüft das Zeichen auf die interen Liste zu konvertierender Zeichen
- */
- char KonvertCharacter( long c ) {
- long count=0;
- UBYTE check=AsciiKonvert[count];
- char ret=0;
-
- while( 1 ) {
- if( check == (UBYTE)c ) {
- /*
- * OK, das Zeichen ist zu konvertieren
- */
- ret=1;
- if( AsciiKonvert[count+1] != 0x0 ) {
- if( putc(AsciiKonvert[count+1], DateiOut) == EOF) {
- printf("Schreibfehler\n");
- ret=-1;
- }
- }
- break;
- }
- count+=2;
- check=AsciiKonvert[count];
- if( check == 0x0 )
- break;
- }
-
- return ret;
- }
-
- void Scan_WPFile() {
- long c;
- char ret;
-
- while( (c = getc(DateiIn)) != EOF ) {
-
- if( c == 0xe1 ) { /* es folgt ein Sonderzeichen */
- c=getc(DateiIn);
- if( putc(c, DateiOut) == EOF) {
- printf("Schreibfehler\n");
- return;
- }
-
- /*
- * nächstes 0xe1 holen
- */
- c=getc(DateiIn);
-
- } else if( c >= ' ' && c <= '~' ) {
- /*
- * normales ASCII-Zeichen, also übernehmen
- */
- if( putc(c, DateiOut) == EOF) {
- printf("Schreibfehler\n");
- return;
- }
- } else if( (ret=KonvertCharacter(c)) == 0 ) {
- /*
- * Also muß es sich um ein Steuerzeichen
- * handeln, daß nicht zu konvertieren ist
- */
- SkipChars( c );
- } else if( ret == -1 ) {
- /*
- * Schreibfehler bei KonvertCharacter aufgetreten
- */
- return;
- }
- }
- }
-
- BOOL Check_If_WPFile() {
- /*
- * Die ersten 2 Bytes lesen
- */
- long readbytes=fread(&Buffer[0],1,2,DateiIn);
-
- if( readbytes == 2 ) {
- if( Buffer[0]==0x80 && Buffer[1] == 0x80 ) {
- fseek(DateiIn,0,0);
- return TRUE;
- }
- }
- return FALSE;
- }
-
- long main(long argc, char **argv) {
- long error=0;
-
- if( argc == 3 ) {
-
- DateiIn=fopen(argv[1],"rb");
-
- if( DateiIn ) {
- if( Check_If_WPFile() ) {
- DateiOut=fopen(argv[2],"wb");
- if( DateiOut ) {
- Scan_WPFile();
- fclose( DateiOut );
- } else {
- printf("Die Datei %s ließ sich nicht erzeugen!\n",argv[2]);
- error=16;
- }
- } else {
- error=15;
- printf("Die Datei %s ist keine WordPerfect-Datei\n",argv[1]);
- }
- fclose( DateiIn );
- } else {
- error=10;
- printf("Die Datei %s ließ sich nicht zum Lesen öffnen\n",argv[1]);
- }
-
- } else if( argc ) {
- /*
- * OK, vom CLI gestartet, bloß die Anzahl der Argumente stimmt nicht
- */
- printf("\nGeschrieben von Rainer Zeitler\n"
- "\nDieses Programm filtert den Text aus einer WordPerfect-Datei\n"
- "und erzeugt eine ASCII-Datei!\n"
- "Aufruf: %s <WP-Dateiname> <ASCII-Dateiname>\n\n",argv[0]);
- error=5;
- }
-
- exit( error );
- }
-